#include <boost/python.hpp>

//#include <Python.h>
//#include <python2.5/Python.h>

#include <Ogre.h>
#include <OIS.h>

#include "OgreApplication.h"
#include "Console.h"
#include "GameStates/GameState.h"

using namespace Ogre;
using namespace boost::python;


//struct World
//{
//    void set(std::string msg) { this->msg = msg; }
//    std::string greet() { return msg; }
//    std::string msg;
//};

BOOST_PYTHON_MODULE(PythonBinding)
{
//    class_<World>("World")
//        .def("greet", &World::greet)
//        .def("set", &World::set)
//    ;
	

	class_<Ogre::Vector3>("Vector3")
		.def(init<Vector3>())	
		.def(init<Real, Real, Real>())
		
		.def("length", &Vector3::length)
		.def("crossProduct", &Vector3::crossProduct)
		.def("normalise", &Vector3::normalise)
		.def("normalisedCopy", &Vector3::normalisedCopy)
		.def("reflect", &Vector3::reflect)
		
		.def_readwrite("x", &Vector3::x)
		.def_readwrite("y", &Vector3::y)
		.def_readwrite("z", &Vector3::z)
		
		.def(self * Real())
		.def(self / Real())

		.def(self + Vector3())
		.def(self - Vector3())
	;

	class_<Ogre::Radian>("Radian")
		.def(init<Real>())
	;
	
	class_<Ogre::Degree>("Degree")
		.def(init<Real>())
	;
	
//	class_<Ogre::Frustum>("Frustum", no_init);
//	class_<Ogre::Camera>("Camera", no_init);
	
//	class_<Ogre::SceneManager>("SceneManager")
//	;
	
//	class_<Ogre::Root>("Root", no_init)
//	;
	
	class_<Ogre::SceneNode>("SceneNode", no_init)
//		.def("setPosition", &SceneNode::getPosition)
//		.def("getPosition", &SceneNode::getPosition)
	;
	
//	class_<OgreApplication>("OgreApplication", no_init)
//		.def("getConsole", &OgreApplication::getConsole)
////		.def("getSceneManager", &OgreApplication::getSceneManager)
////		.def_readwrite("console", &OgreApplication::console)
//	;
	
//	class_<Console>("Console", no_init)
////		.def("getSingletonPtr", &Console::getSingletonPtr)
//		.def("print", &Console::print)
	;
}
